package com.linkgie.galaxyframework.keystore;

import com.linkgie.galaxyframework.utils.security.PasswordSupplier;

/**
 * 密钥库服务；
 * 
 * @author Hike
 *
 */
public interface KeystoreService {

	/**
	 * 是否已经有建立的密钥库；
	 * 
	 * @return
	 */
	boolean hasKeystore();


	/**
	 * 打开密钥库；
	 * <p>
	 * 
	 * 此方法采用默认的密码提供者；
	 * <p>
	 * 
	 * 此方法的行为受到 {@link KeystoreService}
	 * 实现的密钥库管理策略的影响，可能返回一个已经打开的密钥库，也可能需要提供密码重新打开；<br>
	 * 
	 * @return
	 */
	default Keystore requestKeystore() {
		// 采用默认的密码提供者；
		return requestKeyStore(null);
	}

	/**
	 * 请求返回密钥库；
	 * <p>
	 * 
	 * 此方法的行为受到 {@link KeystoreService}
	 * 实现的密钥库管理策略的影响，可能返回一个已经打开的密钥库，也可能需要提供密码重新打开；<br>
	 * 
	 * @param passwordSupplier 密钥库的密码提供者；参数不是必须的，可以为 null；
	 *                         <p>
	 *                         当上下文未匹配到合适的密码提供者时，将采用此参数提供的对象，通过此提供者返回的密码执行操作；
	 *                         <p>
	 *                         如果上下文需要，但没有匹配任何提供者时，将引发异常；
	 * @return
	 */
	Keystore requestKeyStore(PasswordSupplier passwordSupplier);

}
